package desmontec.relatorios


import desmontec.documentos.DPG
import desmontec.documentos.DpgService
import desmontec.documentos.GuiaDeTrafego
import desmontec.documentos.MapaEstocagem
import desmontec.documentos.MapaEstocagemService
import desmontec.funcionarios.Engenheiro
import desmontec.relatorio.RelatorioMapaEstocagemService;
import desmontec.util.*

class RelatorioMapaEstocagemController {

	DpgService dpgService
	MapaEstocagemService mapaEstocagemService
	RelatorioMapaEstocagemService relatorioMapaEstocagemService

	def index = {  redirect(action: listaDPGs)	 }

	def listaDPGs = {
		// SEMPRE LEMBRAR DE REMOVER OBJETO DA SESSAO
		// SE NAO PODE GERAR LIXO OU COMPORTAMENTO INDESEJADO
		session.removeAttribute("mapaRelatorio");

		session.setAttribute "flagExibir", Constantes.TODAS_AS_DPGS_VALIDAS

		def listaDPGs;
		if (session.getAttribute("flagExibir") == Constantes.TODAS_AS_DPGS) {
			listaDPGs = dpgService.consultarDPGs()
		} else {
			listaDPGs = dpgService.consultarDPGsValidas()
		}

		def mapaEstocagemInstance = new MapaEstocagem()
		return [listaDPGs: listaDPGs, mapaEstocagemInstance: mapaEstocagemInstance]
	}

	def listaDPGInv = {
		session.setAttribute "flagExibir", Constantes.TODAS_AS_DPGS
		def listaDPGs  = dpgService.consultarDPGs()
		def mapaEstocagemInstance = new MapaEstocagem()
		render(view:"listaDPGs", model: [listaDPGs: listaDPGs])
	}

	def salvarDPG = {
		def idParam = params.idDPG;

		// nao foi selecionado nenhum ID, exibir mensagem de erro nullable para DPG do ME
		if (idParam == null){
			flash.message = 'Por favor selecione uma DPG'

			def listaDPGs;
			if (session.getAttribute("flagExibir") == Constantes.TODAS_AS_DPGS){
				listaDPGs = dpgService.consultarDPGs()
			}
			else {
				listaDPGs = dpgService.consultarDPGsValidas()
			}
			render(view:"listaDPGs", model: [listaDPGs: listaDPGs])
			return
		} else {
			def idSelecionado = new Integer(idParam);
			session.setAttribute "idDPG", idSelecionado
			redirect(action: "listaMapa")
			return
		}
	}

	def listaMapa = {
		def idDpg = new Long(session.getAttribute("idDPG"))
//		def mapas = mapaEstocagemService.getMapaByDPG(DPG.findAllWhere(id: idDpg))
		
		def mapas = mapaEstocagemService.getMapaByDPG(DPG.findAllWhere(id: idDpg))
		
		return [listaMapas: mapas]
	}

	def salvarMapa = {
		def idParam = params.idMapa;
		// nao foi selecionado nenhum ID, exibir mensagem de erro nullable para DPG do ME
		if (idParam == null){
			flash.message = "Por favor selecione um mapa"
			def idDpg = new Long(session.getAttribute("idDPG"))
			def mapas = mapaEstocagemService.getMapaByDPG(DPG.findAllWhere(id: idDpg))
			render(view: "listaMapa", model: [listaMapas: mapas])
			return
		} else {
			def idSelecionado = new Integer(idParam);
			session.setAttribute "idMapa", idSelecionado
			redirect(action: "exibirMapaEstocagem")
			return
		}
	}

	def exibirMapaEstocagem = {
		def idMapa = new Long(session.getAttribute("idMapa"))
		def mapaEstocagemInstance = MapaEstocagem.get(idMapa)
		def dpgInstance = DPG.get(mapaEstocagemInstance.dpg.id)
		def listaGuiasDeTrafego = GuiaDeTrafego.findAllByMapaDeEstocagem(mapaEstocagemInstance)

		session.setAttribute("mapaRelatorio", mapaEstocagemInstance);
		
		return [mapaEstocagemInstance: mapaEstocagemInstance, dpgInstance:dpgInstance, listaGuiasDeTrafego:listaGuiasDeTrafego]
	}

	def exibirGuia = {
		def guiaDeTrafegoInstance = GuiaDeTrafego.get(params.id)
		return [guiaDeTrafegoInstance: guiaDeTrafegoInstance]
	}

	def geraRelatorio = {
		
		MapaEstocagem mapa = (MapaEstocagem) session.getAttribute("mapaRelatorio");
		String localdata = params.localdata;
		
		File file = relatorioMapaEstocagemService.gerarRelatorio(mapa, localdata);		
		response.setContentType('application/vnd.ms-excel')
		response.setHeader("Content-disposition", "filename=${file.getName()}")
		response.outputStream << file.getBytes()
		
	}
	
	def exibirResponsavel = {
		def idResponsavel = params.id
		def engenheiro = Engenheiro.get(idResponsavel)
		return [ResponsavelInstance: engenheiro]
	}
	
	def exibirQuantidadeMaximaMateriais = {
		def idDpg = params.id
		def dpg = DPG.get(idDpg)
		return [DPGInstance: dpg]
	}
}
